﻿using System.ComponentModel.DataAnnotations;

namespace SvnAPI.Base.Enumerator
{
    #region Private

    #region All Command

    /// <summary>
    /// Defines the available tools to execute a svn command.
    /// </summary>
    enum CommandToolType
    {
        /// <summary>
        /// Define what tool execute the svn admin tool.
        /// </summary>
        [Display(Name = "Svn Admin", Description = "svnadmin.exe")]
        svn_admin = 1,

        /// <summary>
        /// Define what tool execute the svn bench tool.
        /// </summary>
        [Display(Name = "Svn Bench", Description = "svnbench.exe")]
        svn_bench = 2,

        /// <summary>
        /// Define what tool execute the svn tool.
        /// </summary>
        [Display(Name = "Svn", Description = "svn.exe")]
        svn = 3,

        /// <summary>
        /// Define what tool execute the svn dump filter tool.
        /// </summary>
        [Display(Name = "Svn Dump Filter", Description = "svndumpfilter.exe")]
        svn_dump_filter = 4,

        /// <summary>
        /// Define what tool execute the svn look tool.
        /// </summary>
        [Display(Name = "Svn Look", Description = "svnlook.exe")]
        svn_look = 5,

        /// <summary>
        /// Define what tool execute the svn r dump tool.
        /// </summary>
        [Display(Name = "Svn R Dump", Description = "svnrdump.exe")]
        svn_r_dump = 6,

        /// <summary>
        /// Define what tool execute the svn sync tool.
        /// </summary>
        [Display(Name = "Svn Sync", Description = "svnsync.exe")]
        svn_sync = 7
    }

    /// <summary>
    /// Defines the available options execute on svn look tool with de main commands.
    /// </summary>
    enum SvnLookOptions
    {
        /// <summary>
        /// Define the option to show detailed copy source information.
        /// </summary>
        [Display(Name = "Copy Info", Description = "--copy-info")]
        copy_info = 1,

        /// <summary>
        /// Define the option to get differences for copied items against the copy source.
        /// </summary>
        [Display(Name = "Difference Copy From", Description = "--diff-copy-from")]
        diff_copy_from = 2,

        /// <summary>
        /// Define the option to get differences for added files
        /// </summary>
        [Display(Name = "No Difference Added", Description = "--no-diff-added")]
        no_diff_added = 3,

        /// <summary>
        /// Define the option to get differences for deleted files
        /// </summary>
        [Display(Name = "No Difference Deleted", Description = "--no-diff-deleted")]
        no_diff_deleted = 4,

        /// <summary>
        /// Define the option to get information about the extensions.
        /// </summary>
        [Display(Name = "Extensions", Description = "--extensions")]
        extensions = 5,

        /// <summary>
        /// Define the option to limit the output to a maximum number of ARG items.
        /// </summary>
        [Display(Name = "Limit", Description = "--limit")]
        limit = 6,

        /// <summary>
        /// Define the option to 
        /// </summary>
        [Display(Name = "Show Ids", Description = "--show-ids")]
        show_ids = 7,

        /// <summary>
        /// Define the option to shows the filesystem node revision IDs for each path in the filesystem tree.
        /// </summary>
        [Display(Name = "Full Paths", Description = "--full-paths")]
        full_paths = 8,

        /// <summary>
        /// Define the option to operate on a single directory only.
        /// </summary>
        [Display(Name = "Non Recursive", Description = "--non-recursive")]
        non_recursive = 9
    }

    #endregion

    #region Admin Command

    /// <summary>
    /// Defines the available commands to execute on svn admin tool.
    /// </summary>
    enum SvnAdminCommandType
    {
        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Crash Test", Description = "crashtest")]
        crash_test = 1,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Create", Description = "create")]
        create = 2,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Deltify", Description = "deltify")]
        deltify = 3,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Dump", Description = "dump")]
        dump = 4,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Freeze", Description = "freeze")]
        freeze = 5,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Hot Copy", Description = "hotcopy")]
        hot_copy = 6,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "List DB Logs", Description = "list-dblogs")]
        list_db_logs = 7,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "List Unused DB Logs", Description = "list-unused-dblogs")]
        list_unused_db_logs = 8,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Load", Description = "load")]
        load = 9,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Lock", Description = "lock")]
        locck = 10,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "List Locks", Description = "lslocks")]
        list_locks = 11,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "List Transactions", Description = "lstxns")]
        list_txns = 12,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Pack", Description = "pack")]
        pack = 13,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Recover", Description = "recover")]
        recover = 14,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Remove Locks", Description = "rmlocks")]
        remove_locks = 15,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Remove Transactions", Description = "rmtxns")]
        remove_txns = 16,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Unlock", Description = "unlock")]
        unlock = 17,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Upgrade", Description = "upgrade")]
        upgrade = 18,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Verify", Description = "verify")]
        verify = 19
    }

    #endregion

    #region LookCommand

    /// <summary>
    /// Defines the available commands to execute on svn look tool.
    /// </summary>
    enum SvnLookCommandType
    {
        /// <summary>
        /// Defines the command to get the author of a revision or transaction in the repository.
        /// </summary>
        [Display(Name = "Author", Description = "author")]
        author = 1,

        /// <summary>
        /// Defines the contents of a file.
        /// </summary>
        [Display(Name = "Cat", Description = "cat")]
        cat = 2,

        /// <summary>
        /// Defines the paths that were changed in a particular revision or transaction
        /// </summary>
        [Display(Name = "Changed", Description = "changed")]
        changed = 3,

        /// <summary>
        /// Defines the datestamp of a revision or transaction in a repository.
        /// </summary>
        [Display(Name = "Date", Description = "date")]
        date = 4,

        /// <summary>
        /// Defines GNU-style differences of changed files and properties in a repository.
        /// </summary>
        [Display(Name = "Diff", Description = "diff")]
        diff = 5,

        /// <summary>
        /// Defines the directories that were themselves changed
        /// </summary>
        [Display(Name = "Directories Changed", Description = "dirs-changed")]
        dirs_changed = 6,

        /// <summary>
        /// Defines the file size (in bytes) of the file located at PathInRepository in the HEAD revision of the repository
        /// </summary>
        [Display(Name = "File Size", Description = "filesize")]
        file_size = 7,

        /// <summary>
        /// Defines information about the history of a path in the repository
        /// </summary>
        [Display(Name = "History", Description = "history")]
        history = 8,

        /// <summary>
        /// Defines the author, datestamp, log message size (in bytes), and log message, followed by a newline character
        /// </summary>
        [Display(Name = "Info", Description = "info")]
        info = 9,

        /// <summary>
        /// Defines all information available for the lock at PathInRepository
        /// </summary>
        [Display(Name = "Lock", Description = "lock")]
        locck = 10,

        /// <summary>
        /// Defines the log message.
        /// </summary>
        [Display(Name = "Log", Description = "log")]
        log = 11,

        /// <summary>
        /// Defines the tree, starting at PathInRepository
        /// </summary>
        [Display(Name = "Tree", Description = "tree")]
        tree = 12,

        /// <summary>
        /// Defines the UUID for the repository
        /// </summary>
        [Display(Name = "Uuid", Description = "uuid")]
        uuid = 13,

        /// <summary>
        /// Defines the youngest revision number of a repository. 
        /// </summary>
        [Display(Name = "Youngest", Description = "youngest")]
        youngest = 14
    }

    #endregion

    #endregion

    #region public

    #region All Command

    /// <summary>
    /// Defines the available type of execution using svn tool.
    /// </summary>
    public enum ExecutionType
    {
        /// <summary>
        /// Define the option to execute a command with number of revision.
        /// </summary>
        [Display(Name = "Revision", Description = "--revision")]
        revision = 1,

        /// <summary>
        /// Define the option to execute a command with number of transaction.
        /// </summary>
        [Display(Name = "Transaction", Description = "--transaction")]
        transaction = 2,

        /// <summary>
        /// Define the option to execute a command without number of revision or transaction.
        /// </summary>
        [Display(Name = "Non used", Description = "")]
        non_used = 3
    }

    #endregion

    #region Admin Command

    /// <summary>
    /// 
    /// </summary>
    public enum FsType
    {
        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Bdb", Description = "bdb")]
        bdb = 1,

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "Fsfs", Description = "fsfs")]
        fsfs = 2
    }

    #endregion

    #region Result

    /// <summary>
    /// Define the type of result availables after execution.
    /// </summary>
    public enum ResultType
    {
        /// <summary>
        /// Define the result after execute a command was an error.
        /// </summary>
        [Display(Name = "Error")]
        error = 1,

        /// <summary>
        /// Define the result after execute a command was an output.
        /// </summary>
        [Display(Name = "Output")]
        output = 2
    }

    #endregion
    
    #endregion
}